package alugaveis;

import exceptions.ParametroNegativoException;
import exceptions.ParametroVazioException;

/**
 * Classe que representa um filme.
 * @author MateusGomes
 *
 */
public class Filme extends Midia {

	private static final long serialVersionUID = 1L;

	private int duracao = 0;
	private String nacionalidade = null;
	private boolean dublado = false;
	private boolean legendado = true;
	private GeneroFilme genero;

	/**
	 * Cria um filme.
	 * 
	 * @param titulo
	 * 		Titulo do filme.
	 * @param preco
	 * 		Preco de alguel do filme.
	 * @param anoLancamento
	 * 		Ano de lancamento do filme.
	 * @param censura
	 * 		Censura do filme.
	 * @param lancamento
	 * 		True caso o filme seja lancamento, false caso contrario.
	 * @param copias
	 * 		Quantidade de copias do objeto existentes para aluguel.
	 * @param duracao
	 * 		Duracao do filme.
	 * @param nacionalidade
	 * 		Nacionalidade do filme.
	 * @param dublado
	 * 		True caso o filme seja dublado, false caso contrario.
	 * @param legendado
	 * 		True caso o filme seja legendado, false caso contrario.
	 * @param genero
	 * 		Genero do filme.
	 * @throws ParametroVazioException 
	 * @throws ParametroNegativoException 
	 */
	
	public Filme(String titulo, double preco, int anoLancamento, int censura,
			boolean lancamento, int copias, int duracao, String nacionalidade,
			boolean dublado, boolean legendado, GeneroFilme genero) throws ParametroVazioException, ParametroNegativoException{
		
		super(titulo, preco, anoLancamento, censura, lancamento, copias);
		
		if(titulo == null || titulo.trim().equals("") || nacionalidade == null || nacionalidade.trim().equals(""))
			throw new ParametroVazioException();
		if(preco <= 0 || anoLancamento <= 0 || censura <= 0 || copias <= 0 || duracao <= 0)
			throw new ParametroNegativoException();
		
		this.duracao = duracao;
		this.nacionalidade = nacionalidade;
		this.dublado = dublado;
		this.legendado = legendado;
		this.genero = genero;
	}

	/**
	 * Retorna a duracao do filme.
	 * @return
	 * 		A duracao em minutos do filme.
	 */
	public int getDuracao() {
		return duracao;
	}

	/**
	 * Altera a informacao da duracao do filme
	 * @param duracao
	 * 		A nova informacao da duracao do filme.
	 * @throws ParametroNegativoException 
	 */
	public void setDuracao(int duracao) throws ParametroNegativoException {
		if (duracao <= 0)
			throw new ParametroNegativoException();
		this.duracao = duracao;
	}

	/**
	 * Retorna a nacionalidade do filme.
	 * @return
	 * 		A nacionalidade do filme.
	 */
	public String getNacionalidade() {
		return nacionalidade.toLowerCase();
	}

	/**
	 * Altera a informacao da nacionalidade do filme.
	 * @param nacionalidade
	 * 		A nova informacao da nacionalidade do filme.
	 * @throws ParametroVazioException 
	 */
	public void setNacionalidade(String nacionalidade) throws ParametroVazioException {
		if (nacionalidade == null || nacionalidade.trim().equals("")) {
			throw new ParametroVazioException();			
		}
		this.nacionalidade = nacionalidade;
	}

	/**
	 * Retorna se o filme eh dublado.
	 * @return
	 * 		True caso o filme seja dublado, false caso contrario.
	 */
	public boolean isDublado() {
		return dublado;
	}

	/**
	 * Altera a informacao da dublagem do filme.
	 * @param dublado
	 * 			A nova informacao da dublagem do filme.
	 */
	public void setDublado(boolean dublado) {
		this.dublado = dublado;
	}

	/**
	 * Retorna se o filme eh legendado.
	 * @return
	 * 		True caso o filme seja legendado, false caso contrario.
	 */
	public boolean isLegendado() {
		return legendado;
	}

	/**
	 * Altera a informacao da legenda do filme.
	 * @param legendado
	 * 		A nova informacao da legenda do filme.
	 */
	public void setLegendado(boolean legendado) {
		this.legendado = legendado;
	}

	/**
	 * Retorna o genero do filme.
	 * @return
	 * 		O genero do filme.
	 */
	public GeneroFilme getGenero() {
		return genero;
	}

	/**
	 * Altera a informacao do genero do filme.
	 * @param genero
	 */
	public void setGenero(GeneroFilme genero) {
		this.genero = genero;
	}
}
